Um Abfragen nicht separat für Informix/Postgres entwickeln zu müssen, gibt es FreeMarker SQL-Lingua Franca[6] Makros.
Einfaches Beispiel:
Aufruf einer Prodedur
Informix execute procedure sp_proc(); |
Postgres select sp_proc(); |
FreeMarker <@procedure sp_proc/>; |
wird transformiert à |
Informix execute procedure sp_proc(); |
Postgres select sp_proc(); |
procedure ist ein FreeMarker Makro, das definiert ist in der Tabelle fm_templates, id "SQL_lingua franca"
<@informixnolog/>
wenn Informix als Datenbanksystem benutzt wird, wird der Zusatz with no log ausgegeben.
selectintotmp
Informix und Postgres unterscheiden sich darin, wie ein select into temp table aufgebaut ist.
Beispiel
Informix
select key,sum(betrag) from cob_busa where ... group by ?. into temp tmp_busa;
und
Postgres
select key,sum(betrag) into temp tmp_busa from cob_busa where ... group by ?;
Um dieses datenbankunabhängig zu halten, gibt es das Makro selectintotmp mit den parametern select (die Spalten), source (Quelltabelle/n) und target (Zieltabelle).
Eine gegebenenfalls nötige where-Bedingung und group by muss als "Body" innerhalb des selectintotmp-Aufrufs angegeben werden.
Die obigen Beispiele können mit FreeMarker mit folgendem Makroaufruf automatisch erzeugt werden.
<@selectintotmp select="key,sum(betrag)" source="cob_busa" target="tmp_busa">
where ... group by ..
![]() |
![]() ![]() |
Seite 29 / 102 Letzter Update: 17.06.2008 Impressum |